package com.situ.player.service;

import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.Binder;
import android.os.Bundle;
import android.os.IBinder;
import android.os.Message;
import android.util.Log;

import androidx.annotation.Nullable;

import com.situ.player.activity.MusicPlayActivity;

import java.io.IOException;
import java.util.Timer;
import java.util.TimerTask;

public class MusicService extends Service {
    private static final String TAG = "MusicService";
    
    // Android提供的播放器，实现音乐的播放、暂停等功能
    private MediaPlayer mediaPlayer;

    // 定时器
    private Timer timer;

    @Override
    public void onCreate() {
        super.onCreate();
        mediaPlayer = new MediaPlayer();
    }

    // 当Activity绑定上Service时候，可以返回MusicControll
    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        Log.d(TAG, "onBind");
        return new MusicControll();
    }

    // 这里定义的方法都是通过onBind方法返回给Activity调用
    public class MusicControll extends Binder{
        public void init(String path) {
            Log.d(TAG, "init: " + path);
            // 设置播放文件的路径
            try {
                // reset重置
                mediaPlayer.reset();
                mediaPlayer.setDataSource(path);
                mediaPlayer.prepare();
                mediaPlayer.start();
                // 开启定时器，刷新播放进度
                addTimer();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        /**
         * 由暂停到播放
         */
        public void play() {
            Log.d(TAG, "play");
            mediaPlayer.start();
        }

        /**
         * 由播放到暂停
         */
        public void pause() {
            Log.d(TAG, "pause");
            mediaPlayer.pause();
        }

        /**
         * 返回当前正在播放还是暂停
         * @return
         */
        public boolean isPalying() {
            boolean isPlaying = mediaPlayer.isPlaying();
            Log.d(TAG, "isPalying: " + isPlaying);
            return  isPlaying;
        }

        public void seekTo(int progress) {
            Log.d(TAG, "progress: " + progress);
            mediaPlayer.seekTo(progress);
        }
    }

    // 添加定时器，用于更新SeekBar的播放进度
    public void addTimer() {
        if (timer == null) {
            timer = new Timer();
            // 定时任务
            TimerTask task = new TimerTask() {

                @Override
                public void run() {
                    // 如果已经播放结束，直接退出
                    if (mediaPlayer == null) {
                        return;
                    }
                    // 获取歌曲的总长度
                    int duration = mediaPlayer.getDuration();
                    // 获取当前的播放进度
                    int currentPosition = mediaPlayer.getCurrentPosition();
                    Message message = MusicPlayActivity.handler.obtainMessage();
                    // 将音乐的总时长和已经播放的时长放到Message
                    Bundle bundle = new Bundle();
                    bundle.putInt("duration", duration);
                    bundle.putInt("currentPosition", currentPosition);
                    message.setData(bundle);
                    MusicPlayActivity.handler.sendMessage(message);
                }
            };
            // 开启任务后延迟5毫秒执行第一次任务，以后每500毫秒再执行task任务
            timer.schedule(task, 5, 500);
        }
    }

    @Override
    public boolean onUnbind(Intent intent) {
        System.out.println("MusicService.onUnbind()");
        return super.onUnbind(intent);
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        System.out.println("MusicService.onDestroy()");
        // 如果已经关闭，就不需要做处理
        if (mediaPlayer == null) {
            return;
        }

        // 如果正在循环播放，首先停止这个音乐
        if (mediaPlayer.isLooping()) {
            mediaPlayer.stop();
        }

        // 释放资源
        mediaPlayer.release();
        mediaPlayer = null;

    }
}
